home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-12-12 | 54.5 KB | 1,719 lines |
- Newsgroups: comp.sources.misc
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Subject: v09i061: draw, part 01/02
- Reply-To: jta@sah.vtt.fi (Juha Takala)
-
- Posting-number: Volume 9, Issue 61
- Submitted-by: jta@sah.vtt.fi (Juha Takala)
- Archive-name: draw_jt/part01
-
- [This is "dr_lib", a library to produce plots in various formats including
- plot(3) and HPGL formats, and "draw", a simple front-end for the library.
- See the README for more information. ++bsa]
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 2)."
- # Contents: License MANIFEST Makefile README dr_lib.h draw.1 getopt.c
- # getopt.l3 kiero.c koe koe.dat makefile.dos vttlogo
- # Wrapped by allbery@uunet on Tue Dec 12 21:15:56 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'License' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'License'\"
- else
- echo shar: Extracting \"'License'\" \(14173 characters\)
- sed "s/^X//" >'License' <<'END_OF_FILE'
- X
- XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
- X
- X$Id: License,v 1.1 89/12/08 14:00:46 jta Exp Locker: jta $
- X
- XI want this program to be free; that's why I say:
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; version 1.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- XThe GNU General Public License follows (taken directly from GNU Emacs info).
- X
- X=====================Start of GNU General Public License ================
- X
- XGNU GENERAL PUBLIC LICENSE
- X**************************
- X Version 1, February 1989
- X
- X Copyright (C) 1989 Free Software Foundation, Inc.
- X 675 Mass Ave, Cambridge, MA 02139, USA
- X
- X Everyone is permitted to copy and distribute verbatim copies
- X of this license document, but changing it is not allowed.
- X
- X
- XPreamble
- X========
- X
- X The license agreements of most software companies try to keep users
- Xat the mercy of those companies. By contrast, our General Public
- XLicense is intended to guarantee your freedom to share and change free
- Xsoftware---to make sure the software is free for all its users. The
- XGeneral Public License applies to the Free Software Foundation's
- Xsoftware and to any other program whose authors commit to using it.
- XYou can use it for your programs, too.
- X
- X When we speak of free software, we are referring to freedom, not
- Xprice. Specifically, the General Public License is designed to make
- Xsure that you have the freedom to give away or sell copies of free
- Xsoftware, that you receive source code or can get it if you want it,
- Xthat you can change the software or use pieces of it in new free
- Xprograms; and that you know you can do these things.
- X
- X To protect your rights, we need to make restrictions that forbid
- Xanyone to deny you these rights or to ask you to surrender the rights.
- XThese restrictions translate to certain responsibilities for you if you
- Xdistribute copies of the software, or if you modify it.
- X
- X For example, if you distribute copies of a such a program, whether
- Xgratis or for a fee, you must give the recipients all the rights that
- Xyou have. You must make sure that they, too, receive or can get the
- Xsource code. And you must tell them their rights.
- X
- X We protect your rights with two steps: (1) copyright the software, and
- X(2) offer you this license which gives you legal permission to copy,
- Xdistribute and/or modify the software.
- X
- X Also, for each author's protection and ours, we want to make certain
- Xthat everyone understands that there is no warranty for this free
- Xsoftware. If the software is modified by someone else and passed on, we
- Xwant its recipients to know that what they have is not the original, so
- Xthat any problems introduced by others will not reflect on the original
- Xauthors' reputations.
- X
- X The precise terms and conditions for copying, distribution and
- Xmodification follow.
- X
- X TERMS AND CONDITIONS
- X
- X 1. This License Agreement applies to any program or other work which
- X contains a notice placed by the copyright holder saying it may be
- X distributed under the terms of this General Public License. The
- X "Program", below, refers to any such program or work, and a "work based
- X on the Program" means either the Program or any work containing the
- X Program or a portion of it, either verbatim or with modifications. Each
- X licensee is addressed as "you".
- X
- X 2. You may copy and distribute verbatim copies of the Program's source
- X code as you receive it, in any medium, provided that you conspicuously and
- X appropriately publish on each copy an appropriate copyright notice and
- X disclaimer of warranty; keep intact all the notices that refer to this
- X General Public License and to the absence of any warranty; and give any
- X other recipients of the Program a copy of this General Public License
- X along with the Program. You may charge a fee for the physical act of
- X transferring a copy.
- X
- X 3. You may modify your copy or copies of the Program or any portion of
- X it, and copy and distribute such modifications under the terms of Paragraph
- X 1 above, provided that you also do the following:
- X
- X * cause the modified files to carry prominent notices stating that
- X you changed the files and the date of any change; and
- X
- X * cause the whole of any work that you distribute or publish, that
- X in whole or in part contains the Program or any part thereof, either
- X with or without modifications, to be licensed at no charge to all
- X third parties under the terms of this General Public License (except
- X that you may choose to grant warranty protection to some or all
- X third parties, at your option).
- X
- X * If the modified program normally reads commands interactively when
- X run, you must cause it, when started running for such interactive use
- X in the simplest and most usual way, to print or display an
- X announcement including an appropriate copyright notice and a notice
- X that there is no warranty (or else, saying that you provide a
- X warranty) and that users may redistribute the program under these
- X conditions, and telling the user how to view a copy of this General
- X Public License.
- X
- X * You may charge a fee for the physical act of transferring a
- X copy, and you may at your option offer warranty protection in
- X exchange for a fee.
- X
- X Mere aggregation of another independent work with the Program (or its
- X derivative) on a volume of a storage or distribution medium does not bring
- X the other work under the scope of these terms.
- X
- X 4. You may copy and distribute the Program (or a portion or derivative of
- X it, under Paragraph 2) in object code or executable form under the terms of
- X Paragraphs 1 and 2 above provided that you also do one of the following:
- X
- X * accompany it with the complete corresponding machine-readable
- X source code, which must be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X * accompany it with a written offer, valid for at least three
- X years, to give any third party free (except for a nominal charge
- X for the cost of distribution) a complete machine-readable copy of the
- X corresponding source code, to be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X * accompany it with the information you received as to where the
- X corresponding source code may be obtained. (This alternative is
- X allowed only for noncommercial distribution and only if you
- X received the program in object code or executable form alone.)
- X
- X Source code for a work means the preferred form of the work for making
- X modifications to it. For an executable file, complete source code means
- X all the source code for all modules it contains; but, as a special
- X exception, it need not include source code for modules which are standard
- X libraries that accompany the operating system on which the executable
- X file runs, or for standard header files or definitions files that
- X accompany that operating system.
- X
- X 5. You may not copy, modify, sublicense, distribute or transfer the
- X Program except as expressly provided under this General Public License.
- X Any attempt otherwise to copy, modify, sublicense, distribute or transfer
- X the Program is void, and will automatically terminate your rights to use
- X the Program under this License. However, parties who have received
- X copies, or rights to use copies, from you under this General Public
- X License will not have their licenses terminated so long as such parties
- X remain in full compliance.
- X
- X 6. By copying, distributing or modifying the Program (or any work based
- X on the Program) you indicate your acceptance of this license to do so,
- X and all its terms and conditions.
- X
- X 7. Each time you redistribute the Program (or any work based on the
- X Program), the recipient automatically receives a license from the original
- X licensor to copy, distribute or modify the Program subject to these
- X terms and conditions. You may not impose any further restrictions on the
- X recipients' exercise of the rights granted herein.
- X
- X 8. The Free Software Foundation may publish revised and/or new versions
- X of the General Public License from time to time. Such new versions will
- X be similar in spirit to the present version, but may differ in detail to
- X address new problems or concerns.
- X
- X Each version is given a distinguishing version number. If the Program
- X specifies a version number of the license which applies to it and "any
- X later version", you have the option of following the terms and conditions
- X either of that version or of any later version published by the Free
- X Software Foundation. If the Program does not specify a version number of
- X the license, you may choose any version ever published by the Free Software
- X Foundation.
- X
- X 9. If you wish to incorporate parts of the Program into other free
- X programs whose distribution conditions are different, write to the author
- X to ask for permission. For software which is copyrighted by the Free
- X Software Foundation, write to the Free Software Foundation; we sometimes
- X make exceptions for this. Our decision will be guided by the two goals
- X of preserving the free status of all derivatives of our free software and
- X of promoting the sharing and reuse of software generally.
- X
- X NO WARRANTY
- X
- X 10. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
- X FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
- X OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
- X PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
- X OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- X MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
- X TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- X PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
- X REPAIR OR CORRECTION.
- X
- X 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
- X ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
- X REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
- X INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
- X ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
- X LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
- X SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
- X WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- X ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- X
- X END OF TERMS AND CONDITIONS
- X
- X
- XAppendix: How to Apply These Terms to Your New Programs
- X=======================================================
- X
- X If you develop a new program, and you want it to be of the greatest
- Xpossible use to humanity, the best way to achieve this is to make it
- Xfree software which everyone can redistribute and change under these
- Xterms.
- X
- X To do so, attach the following notices to the program. It is safest to
- Xattach them to the start of each source file to most effectively convey
- Xthe exclusion of warranty; and each file should have at least the
- X"copyright" line and a pointer to where the full notice is found.
- X
- X ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- X Copyright (C) 19YY NAME OF AUTHOR
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- XAlso add information on how to contact you by electronic and paper mail.
- X
- XIf the program is interactive, make it output a short notice like this
- Xwhen it starts in an interactive mode:
- X
- X Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- X Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- X This is free software, and you are welcome to redistribute it
- X under certain conditions; type `show c' for details.
- X
- XThe hypothetical commands `show w' and `show c' should show the
- Xappropriate parts of the General Public License. Of course, the
- Xcommands you use may be called something other than `show w' and `show
- Xc'; they could even be mouse-clicks or menu items---whatever suits your
- Xprogram.
- X
- XYou should also get your employer (if you work as a programmer) or your
- Xschool, if any, to sign a "copyright disclaimer" for the program, if
- Xnecessary. Here a sample; alter the names:
- X
- X Yoyodyne, Inc., hereby disclaims all copyright interest in the
- X program `Gnomovision' (a program to direct compilers to make passes
- X at assemblers) written by James Hacker.
- X
- X SIGNATURE OF TY COON, 1 April 1989
- X Ty Coon, President of Vice
- X
- XThat's all there is to it!
- X
- X====================== End of GNU General Public License ================
- END_OF_FILE
- if test 14173 -ne `wc -c <'License'`; then
- echo shar: \"'License'\" unpacked with wrong size!
- fi
- # end of 'License'
- fi
- if test -f 'MANIFEST' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'MANIFEST'\"
- else
- echo shar: Extracting \"'MANIFEST'\" \(561 characters\)
- sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
- X File Name Archive # Description
- X-----------------------------------------------------------
- X License 1
- X MANIFEST 1
- X Makefile 1
- X README 1
- X dr_lib.c 2
- X dr_lib.h 1
- X draw.1 1
- X draw.c 2
- X getopt.c 1
- X getopt.l3 1
- X kiero.c 1
- X koe 1
- X koe.dat 1
- X makefile.dos 1
- X vttlogo 1
- END_OF_FILE
- if test 561 -ne `wc -c <'MANIFEST'`; then
- echo shar: \"'MANIFEST'\" unpacked with wrong size!
- fi
- # end of 'MANIFEST'
- fi
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(2766 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- X#
- X# Makefile for draw
- X# Copyright (C) 1988, 1989 by Juha Takala
- X# jta@sah.vtt.fi
- X
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; version 1.
- X
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# the file "License" for more details.
- X
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X# Send bug reports and suggestions to:
- X# jta@sah.vtt.fi
- X#
- X# $Id: Makefile,v 2.7 89/12/11 09:24:39 jta Exp $
- X#
- X
- XSRCS = dr_lib.h dr_lib.c draw.c
- XDOCS = README draw.1 License
- XMAKES = Makefile makefile.dos
- XOTHERS = koe koe.dat vttlogo kiero.c
- XGETOPTSRC = getopt.c getopt.l3
- XKIT = $(DOCS) $(SRCS) $(MAKES) $(OTHERS) $(GETOPTSRC)
- X
- X########## BEGINning of configuration section #############
- X
- XCC = cc
- X
- X# Choose one. UNIX (SysV) and MSDOS are tested, BSD should be easy, and VMS
- X# has also been done a long time and many versions ago
- XOS = -DUNIX
- X#OS = -DMSDOS
- X#OS = -DVMS
- X
- X# SYSV shared libraries work in my system! Take it or leave it.
- XLIBSH = -lc_s
- X
- X# Choose of these; gcc allows both:
- X#DEBUG = -g
- XDEBUG = -O
- X
- X# Do define this if you want *NIX plot(3) interface calls
- XPLOT = -DPLOT
- X
- X# Do define this if you want LIBGL. It is a library that will handle ega
- X# etc. Look for its docs.
- XGL_LIB = -DGL_LIB
- X
- X# Where to find gl_plot() funtions. If you didn't define GL_LIB,
- X# you don't need this, either
- XLIBGL = ../gl_plot/gl.a
- X
- X# Standard *NIX plot(3) library spec. This might also be -l4014 for
- X# direct tek4014 output. See plot(3).
- XLIBPLOT = -lplot
- X
- X# If you don't have getopt library, use this. This is the one that has been
- X# posted into netland long ago. I guess MS-DOSsers need this.
- X# GETOPT = getopt.o
- X
- XCI = ci
- XCO = co
- XSHAR = makekit -s10k
- XTAR = gtar -zcf draw.zar
- X
- X################## END of configuration section ###################
- X
- XCFLAGS = $(DEBUG) $(GL_LIB) $(OS) $(PLOT)
- X
- X# Collection of libraries to give ld
- XLIBS = $(LIBGL) $(LIBPLOT) $(LIBSH) -lm
- X
- XOBJS = draw.o dr_lib.o $(GETOPT)
- X
- Xdraw: $(OBJS) $(LIBGL)
- X cc $(CFLAGS) -o $@ $(OBJS) $(LIBS)
- X
- X$(OBJS): dr_lib.h
- X
- Xdemo: kiero draw
- X# kiero | ./draw -tplot | tplot -T4014
- X# maybe it is better to leave the fun to be done by hand...
- X
- X# the name is finnish and means 'screwed'
- Xkiero: kiero.c
- X cc -o kiero kiero.c -lm $(LIBSH)
- X
- Xci: ; for i in $(KIT); do $(CI) $$i </dev/null; done
- Xco: ; for i in $(KIT); do $(CO) $$i; done
- X
- Xkit: $(KIT); $(SHAR) $(KIT)
- Xzar: $(KIT); $(TAR) $(KIT)
- Xlint: ; lint $(CFLAGS) $(SRCS)
- END_OF_FILE
- if test 2766 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(3603 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- X$Id: README,v 2.3 89/12/11 09:25:07 jta Exp $
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X file "License" for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- XWhat we have here
- X*****************
- X
- Xdr_lib.c :
- X----------
- X
- Xdr_lib.c is a collection of simple device level graphics drawing
- Xsubroutines. dr_lib.c has several output choises: it will produce HPGL
- Xdirectly, produce plot(3) code, and use gl_plot(3) library to support EGA,
- XCGA, HERCULES, IBM graphics printer, Laserjet, etc. gl_plot was posted in
- Xcomp.sources.unix some time ago, and it is made by umix!m-net!dtlewis!lewis,
- Xthe rest is made by me. There is a compile time scwith (see Makefile) to
- Xinclude code generation for gl_plot(). If you want to include gl_plot()
- Xcode, make sure your gl_plot() library works in your system.
- X
- XI once made a quick port of gl_lib to 386 UNIX (Enix), but I have no longer
- Xacces to that system. My current system is Interactive SVr3.2, and it was
- Xnot so easy to port gl_lib here. I also have X now, and that has Tektronix
- Xemulation. That is why I implemented the standard *NIX plot(3) library
- Xinterface into dr_lib.c (*NIX has also tplot(1)), so this is my current
- Xmethod to get plots onto screen.
- X
- X
- Xdraw.c :
- X--------
- X
- Xdraw.c is intended to be a "front-end" for dr_lib routines. draw.c makes
- Xuse of line and text drawing and pen movement routines to build x-y pictures
- Xwith axes, labels, text etc. Nothing will prevent you from making your own
- Xmain program to call directly functions in dr_lib.c, if you like. Real
- X[nt]roff-able man page is also included in this kit (draw.1), hope it is up
- Xto date.
- X
- X
- Xkiero.c :
- X---------
- X
- Xkiero.c is a fancy demo program that will produce data into its stdout, to
- Xbe processed further by draw. It will also put enough definitions, so that
- Xyou can pipe its stdout directly to draw.
- X
- X
- XCompiling and Installing :
- X--------------------------
- X
- X1) Edit the Makefile to suit your system. Then say 'make'. This version of
- X draw is developed under Interactive 386/ix SysV 3.2. draw was born veery
- X looong time ago started under BSD 4.x, has also been compiled under
- X MosseDos (MSC x), and even VMS. Porting to these systems should be quite
- X easy, send the diffs to me if there is something special.
- X
- X2) draw will use enviroment variable DRAWDEV to decide what kind of device
- X it should work for. Default value is `ega' for gl_plot() subroutine
- X package. That, again will use GLMODE to choose between EGA, CGA, VGA
- X etc. I have:
- X DRAWDEV=plot; export DRAWDEV # my default is to pipe to tplot(1)
- X GLMODE=256; export GLMODE # but specifying -tega, I get it to
- X # my Epson FX-80...
- X PLOTDEV=lp; export PLOTDEV # ... which is /dev/lp
- X in my .profile
- X
- X
- X
- XTo do :
- X-------
- X
- X- Real support for X.
- X
- X- Suggestions ?
- X
- X
- X I would like to hear a) experiences in porting this package into
- X different systems, b) bugs & new features, so that I can fix and
- X include them in next version, if it ever will be made.
- X
- X jta@sah.vtt.fi voice: +358 0 4566425
- X
- X Juha Takala
- X VTT/SAH
- X PL 34
- X 02151 Espoo
- X Finland
- X
- X
- END_OF_FILE
- if test 3603 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'dr_lib.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dr_lib.h'\"
- else
- echo shar: Extracting \"'dr_lib.h'\" \(4029 characters\)
- sed "s/^X//" >'dr_lib.h' <<'END_OF_FILE'
- X/*
- X
- XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; version 1.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X the file "License" for more details
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X
- X */
- X
- X
- X/* $Id: dr_lib.h,v 2.3 89/12/08 14:00:31 jta Exp Locker: jta $
- X *
- X * This is header file for a subroutine package that contains
- X * device level routines to manipulate graphics devices such as
- X * - hpgl output for hp7475 plotter
- X * - gl_plot(3) calls for EGA or matrix printer output
- X * - plot(3) interface
- X *
- X * Following routines are provided:
- X *
- X *
- X * void circle()
- X * - draw a small circle at current point
- X *
- X * void dr_set_pen(n)
- X * int n;
- X * - select pen n
- X * - n==0 menas 'put it away'
- X * - n = 1..6 means select pen n
- X * - n<0 or n>6 issues error message and selects pen 1
- X *
- X * void dr_goto(x,y,linetype,penup,relative)
- X * float x, y; int linetype, penup;
- X * - move pen to point (x,y)
- X * - if penup!=0, will draw line of type linetype
- X * - if relative!=0, will move relative to current point
- X *
- X * void dr_draw_line(x1, y1, x2, y2, linetype)
- X * float x1, y1, x2, y2; int linetype;
- X * - draw a line of type linetype from poin (x1,y1) to point (x2,y2)
- X *
- X * void dr_set_shape(x)
- X * float x;
- X * - change text 'fatness'
- X *
- X * void dr_set_size(x)
- X * float x;
- X * - change text size
- X *
- X * void dr_draw_array(x, y, n, linetype)
- X * float x[], y[]; int n, linetype;
- X * - points (x[i],y[i]) (i = 0..n-1) will be connected
- X * with line of linetype
- X *
- X * void dr_put_mark(x, y, mark)
- X * float x, y; char mark;
- X * - put marker mark at point (x,y)
- X *
- X * void dr_put_text(xpos, ypos, xofs, yofs, dir, size, s)
- X * float xpos, ypos, xofs, yofs; char *dir, *size, *s;
- X * - put text s to position (xpos+xofs,ypos+yofs) in direction dir
- X *
- X * int dr_finish()
- X * - finish plotting, report errors, return number of them
- X *
- X * void dr_start(xlow, xhigh, ylow, yhigh, dev)
- X * float xlow, xhigh, ylow, yhigh; int dev;
- X * - prepare plotting for device dev, establish relative drawing area
- X *
- X * void dr_xgrid(n)
- X * int n;
- X * - draw vertical grid lines
- X *
- X * void dr_ygrid(n)
- X * int n;
- X * - draw horizontal grid lines
- X *
- X * void dr_area_def(xlow, xincr, xhigh, ylow, yincr, yhigh, no_axes)
- X * float xlow, xincr, xhigh, ylow, yincr, yhigh;
- X * int no_axes;
- X * - establish user coordinates
- X * - draw x- and y-axis and tick marks (only if no_axes == 0)
- X *
- X * void dr_errmsg(s)
- X * char *s;
- X * - send string s to error log file
- X */
- X
- Xint dr_set_ltype();
- Xvoid dr_goto(), dr_draw_line(), dr_draw_array(), dr_put_mark();
- Xvoid dr_set_pen(), dr_set_shape(), dr_set_size(), dr_put_text(), dr_set_cset();
- Xint dr_finish();
- Xvoid dr_start(), dr_area_def();
- Xvoid dr_xgrid(), dr_ygrid(), dr_draw_circle();
- Xvoid dr_errmsg(), dr_warnmsg();
- X
- X
- X/* The following devices are supported: */
- X#define HP7475 1 /* hp 7475 plotter */
- X#define SCREEN 2 /* ega == dtlewis's gl_plot */
- X#define PLOTLIB 3 /* UNIX plot(3) interface */
- X#define FIRSTDEV HP7475
- X#define LASTDEV PLOTLIB
- X#define INVDEV -1
- X#define DEVMASK 0xff
- X
- X/* the following are paper size coding */
- X#define SIZE_A4 0x100
- X#define SIZE_A3 0x200
- X#define SIZE_A 0x400
- X#define SIZE_B 0x800
- X#define SIZEMASK 0xff00
- X
- X#ifdef PLOT
- Xextern void openpl();
- Xextern void erase();
- Xextern void label();
- Xextern void line();
- Xextern void circle();
- Xextern void arc();
- Xextern void move();
- Xextern void cont();
- Xextern void point();
- Xextern void linemod();
- Xextern void space();
- Xextern void closepl();
- X#endif
- X
- X#ifdef MSDOS
- X#define M_PI_2 1.5707963268
- X#endif
- END_OF_FILE
- if test 4029 -ne `wc -c <'dr_lib.h'`; then
- echo shar: \"'dr_lib.h'\" unpacked with wrong size!
- fi
- # end of 'dr_lib.h'
- fi
- if test -f 'draw.1' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'draw.1'\"
- else
- echo shar: Extracting \"'draw.1'\" \(14856 characters\)
- sed "s/^X//" >'draw.1' <<'END_OF_FILE'
- X.\" dummy line
- X' $Id: draw.1,v 2.4 89/12/11 09:25:12 jta Exp $
- X.TH DRAW 1L "" "Graphics utilities"
- X.UC 4
- X.SH NAME
- Xdraw
- X\- Yet another line- etc. drawing utility.
- X.SH SYNOPSIS
- X\fBdraw\fP [\fIoptions\fP] [\fIfiles\fP]
- X.SH DESCRIPTION
- XThe purpose of \fBdraw\fP is basically to read
- X(\fIx,y\fP)
- Xcoordinates from user's data file(s) (or stdin) and produce a
- Xpolyline connecting those points on a graphic device.
- XCoordinate axes, labels for axes, etc. are made on user's request.
- X.PP
- XThe good thing about this program is, that it accepts infinite size input;
- Xdata is not stored inside program, but procecced immediately.
- X
- XThe output data should be sent to desired device.
- XThe input data stream is organised as lines of text.
- XThere are three kinds of input lines:
- X.RS 2
- X.IP \(bu 3
- XEmpty lines containing only white space, and comment lines
- Xstarting with `\fB#\fR'.
- XAdding or removing these has no effects on output.
- X.IP \(bu
- XPseudo comment lines (command lines); they look like
- X`\fB#$ \fIcommand arguments\fR'.
- XThese lines have effects on what is to be output, and thus what
- Xthe picture will look like.
- X.IP \(bu
- XOthers are taken to be data lines.
- XData line that does not have
- Xtwo floating point numbers (generally) at beginning, is invalid
- Xand will be discarded, and error message will be generated.
- XRest
- Xof the line is not used, so it may contain any text.
- X(See also \fB-f\fP)
- X.RE
- X.PP
- XCurrently supported devices are (see \fB-t\fR):
- X.RS 2
- X.IP \(bu 3
- XHP7475 plotter. Using this you get the HPGL code to stdout.
- XUse redirection to lp(1), /dev/tty00 or whatever you like.
- X.IP \(bu
- XEGA & friends.
- XThis is implemented by using \fIgl_plot\fR(3)
- Xlibrary calls, and so you can get the picture to whatever device
- Xthat library can handle. The library has been posted in
- Xcomp.sources.unix and is made by D. T. Lewis. Existence of this device
- Xdepends of compile-time option, and may not be present at your
- Xsystem, contact the person who did the installation at your site.
- X
- X.IP \(bu
- XStandard *NIX \fIplot\fP(3) output (\fBdraw\fP versions 2.x and later).
- XThis produces device independent stuff to stdout, so you may want to filter
- Xit futher with \fItplot\fP(1) into suitable form for your graphics
- Xdevice.
- X.RE
- X.PP
- X\fBdraw\f may give some error and warning messages during its run.
- XDuring the plotting, the messages are collected into a log file named
- X\fIdraw.err\fP
- Xto be viewed after the run, because stdout and stderr might be the same
- Xdevice (as in the case of a T-connected plotter). After the run, the
- Xnumber of errors and warnings is reported, if non-zero, or the log-file
- Xis removed.
- X.PP
- XFatal errors cause immediate termination of program. They are
- Xgenerated by invalid device or range specifications and such.
- XNon-fatal errors are generated, when invalid pseudo comments are
- Xfound, invalid data lines are found, or data points fall
- Xoutside device hard limits. Warnings are generated, when data
- Xpoints fall outside user coordinate ranges.
- X.PP
- XExit status is 1 if errors were detected, 2 if nothing was done,
- Xand 0 otherwise (warnings are possible in this case).
- X.SS Controlling the job
- X.PP
- XYou can change the way of drawing with
- X.B command line options
- Xor
- X.B pseudo comments
- Xor both.
- XThere are options to set plotting area on device, axis
- Xranges, label texts, name for the picture, etc.
- X.PP
- XAll command line options must be given before any
- Xfilenames, they are parsed by \fIgetopt\fR(3).
- X.PP
- XMost pseudo comments need arguments.
- XTextual arguments contunue till the end of line.
- XArguments are separated form the command by
- Xat least one whitespace character, and from each other by exactly
- Xone `\fB,\fR' (comma).
- X.PP
- XMost pseudo comments remember the pen position (thinking of plotter
- Xoutput), so you can easily put some
- Xexplanatory text into your picture at any moment without
- Xmaking a break in the figure to be drawn.
- X.PP
- XIn the following both the command line options and pseudo comments, that
- Xhave same effect,
- Xare described in parallel, because there are both ways available
- Xto do most things.
- X.PP
- X.B #$absolute
- X.I \fR[\fPx_origin,y_origin\fR]\fP
- X.br
- X.B #$endabsolute
- X.RS
- XAfter the \fB#$absolute\fP command, following input data pairs, until
- Xthe \fB#$endabsolute\fP command, are converted as follows: each \fIx\fP
- Xvalue is added to \fIx_origin\fP, and the resulting number is scaled so
- Xthat 0.0 corresponds to \fIxlow\fP and 1.0 corresponds to \fIxhigh\fP
- X(see \fB-x\fP and \fB#$xrange\fP). Similar conversion
- Xapplies to \fIy\fP-values. Default values for \fIx_origin\fP and
- X\fIy_origin\fP are 0.0, if they are missing (or invalid, in which case
- Xno error is reported!).
- X
- XThis feature is supposed to be useful with the \fB#$include\fP command,
- Xso that some constant data, eg. logos or such, may be inserted into
- Xpictures. Note, however, that changing the ratio of \fIx\fP and \fIy\fP
- Xdirection's relative drawing areas (see \fB-a\fP and \fB#$area\fP) will
- Xaffect the shape!
- X.RE
- X.PP
- X.B -a
- X.I x1,y1,x2,y2
- X.br
- X.B #$area
- X.I x1,y1,x2,y2
- X.RS
- XCan be used to specify plotting area on device, when several
- Xpictures are to be plotted on one paper sheet.
- X.I x1,y1
- Xwill specify lower left corner and
- X.I x2,y2
- Xwill specify upper right corner. Enough
- Xmarginal area is automatically reserved for axis labels and picture
- Xname texts.
- XDefault is 0,0,1,1 to use whole device area. Pseudo command may
- Xtake effect only if command line option has not been specified,
- Xand must be given before device initialization (see \fB#$init\fR) has
- Xtaken place, otherwise the default will be used.
- X.RE
- X.PP
- X.B -b
- X.br
- X.B #$noaxes
- X.RS
- XDisables the drawing of coordinate axes, labels, name etc.
- XOnly
- Xthe data points (and commands inside data) will produce somthing
- Xvisible on device.
- XTo take effect, this must be specified before
- Xdevice initialization (see \fB#$init\fR) is done.
- X.RE
- X.PP
- X.B -c
- X.I n
- X.br
- X.B #$cset
- X.I n
- X.RS
- XSpecifies character set \fIn\fP to be used. Meaning of \fIn\fP
- Xis the same as for HP7475.
- XPseudo comment can be used many times in the data to mix different
- Xcharacter sets.
- XChanging character set does not affect pen's position or up/down status.
- XInitial value is 0 for US Ascii character set.
- X\fB#$cset\fP will force device initialization.
- X\fBNote:\fP all devices are not capable to support this. In those cases
- Xthis command is ignored.
- X.RE
- X.PP
- X.B -d
- X.br
- X.BR #$date | #$time
- X.RS
- XAsks \fBdraw\fP to output current date (or date and time) in upper right
- Xcorner of the picture.
- XGiven \fB-dd\fP or \fB -d -d \fP on command line is equvalent to
- X\fB#$time\fP, and causes also current time to be output.
- X.RE
- X.PP
- X.B #$direction
- X.I angle
- X.RS
- XSpecify \fIangle\fP (radians) to be the direction, where text will be
- Xwritten form now on.
- XInitial value is 0.0 (left to right, parallel to x-axis).
- XPositive values go counterclockwise.
- XWorks in funny way with device \fB-tplot\fP: letters are not re-oriented,
- Xbut lines of text run in desired \fIangle\fP.
- X.RE
- X.PP
- X.B -f
- X.I n1,n2
- X.RS
- XChanges the format of input.
- XUsually the two first columns are
- Xconsidered on each line, and the order is so that first column is
- Xvalue for \fIx\fP, and second column is value for \fIy\fP.
- XThis option tells \fBdraw\fP that value for \fIx\fP should be taken from
- Xcolumn \fIn1\fP, and \fIy\fP should be taken from column \fIn2\fP.
- XGiving \fB-f 2\,1\fP effectively reverses the variables.
- XPseudo comment version is not available.
- X.RE
- X.PP
- X.B -g
- X.I nx,ny
- X.br
- X.B #$grid
- X.I nx,ny
- X.RS
- XSpecify how grid lines should be drawn.
- XIf this option is not
- Xgiven, no grid lines are drawn.
- X.IR nx " applies to " x- "grid lines (parallel to "
- X.IR y- "axis), and " ny " applies to " y- "grid"
- Xlines, both should be (small) non-negative integers.
- XUsing 1 for either \fIn\fP will produce grid lines at every
- X\fIincr\fP positions (see options \fB-x\fP and \fB-y\fP).
- XUsing 2 will double the grid line density etc.
- XSpecifying 0 for either direction will produce no grid lines for that
- Xdirection.
- X.RE
- X.PP
- X.B -h
- X.RS
- XGives short description of available command line options and
- Xexits.
- X.RE
- X.PP
- X.B #$include
- X.I file
- X.RS
- XCauses \fBdraw\fP to take temporarily input from file \fIfile.\fP
- XAfter that file is done, input resumes from current file. Nesting is
- Xallowed, ie. included files may include other files.
- X.RE
- X.PP
- X.B #$init
- X.RS
- XForces internal and device dependant initialization with current
- Xvalues. This is not necessary,
- Xbecause the initializations are done automatically by the time
- Xwhen first data point is to be processed.
- XInternal initializations include following things:
- X.RS 2
- X.IP 0) 4
- XMemory allocation for raster buffers, mode switching into graphic
- Xmode and ioctls to map EGA-memory into user-space, if appropriate.
- X.IP 1)
- XFix internal translation between user coordinate system and device
- Xcoordinate system.
- XUser coordinate system is defined by
- X.IR xlow,xhigh " and " ylow,yhigh
- Xwhich are taken from
- X.BR -x " and " -y
- Xcommand line options' arguments, or, if they were not given, from
- X.BR #$xrange " and " #$yrange
- Xpseudo comments' arguments, or if they have not been found (at the
- Xmoment), default values are used.
- XDevice coordinate system is device dependent.
- X.IP 2)
- XDraw coordinate axes and units, if allowed.
- X.IP 3)
- XDraw grid lines if requested.
- X.IP 4)
- XPrint labels for axes, if specified.
- X.IP 5)
- XPrint name for the picture, if specified.
- X.IP 6)
- XPrint current date (and time), if requested.
- X.RE
- X.PP
- XSteps 4).. may be done also at later time, but only if no
- Xspecification is available at the time of initialization.
- XIn any
- Xcase it is checked that each of these step is made at most once.
- X.RE
- X.PP
- X.B -l
- X.I n
- X.br
- X.B #$ltype
- X.I n
- X.RS
- XChoose line type \fIn\fP to be used. The meaning for \fIn\fP is the
- Xsame as in HPGL, but 7 is for continous line (initial value).
- X\fB#$ltype\fP will force device initialization.
- X\fBNote:\fP all devices are not capable to support this. In those cases
- Xthis command is ignored.
- X.PP
- X.RE
- X.PP
- X.B -m
- X.I c
- X.br
- X.B #$mark
- X.I c
- X.RS
- XChoose character \fIc\fP
- Xto be used as marker at each data point, no line will be drawn to
- Xconnect them. This is a way to get a "scattergram" of your
- Xobservations. Pseudocomment may also specify no
- Xmarker at all (just say \fB#$mark\fR).
- XThat will tell \fBdraw\fP to start drawing continuous lines again, using
- Xcurrent line type.
- XMarker may be changed as many times as desired, and the effect is
- Ximmediate from next data point on, until next change.
- X.RE
- X.PP
- X.B -n
- X.I nametext
- X.br
- X.B #$name
- X.I nametext
- X.RS
- XCauses \fInametext\fP to be output on top of the picture.
- XThe text is centered and character size is twice the default size.
- XName may be specified only once, so if command line has specified one,
- Xpseudo comment has no effect.
- X.RE
- X.PP
- X.B -p
- X.I n
- X.br
- X.B #$pen
- X.I num
- X.RS
- XChoose pen number \fIn\fP to be used, default is 1.
- XHP7475 has room for 6 pens, and EGA has not implemented this yet
- X(makes white), but.. "coming real soon now". \fIplot\fP(3) does not
- Xhave any colors. Pen status (up/down) does not change.
- X\fB#$pen\fP will force device initialization.
- X.RE
- X.PP
- X.B #$penup
- X.RS
- XLift pen up. Pen will go automatically down after next data point.
- XThis makes it possible to draw more than one line into one picture:
- XAt the point, where one line should end, just put command
- X`\fB#$penup\fR' and continue with the data for next line.
- XIt might also be wise to put `\fB#$ltype \fInum\fR' and/or
- X`\fB#$pen \fInum\fR' to make some visible difference for those
- Xlines.
- X.RE
- X.PP
- X.B -S
- X.I factor
- X.br
- X.B #$shape
- X.I factor
- X.RS
- XChange character fatness. \fIfactor\fP
- Xshould be a floating point number and not far from 1.0 to get
- Xreasonable looking characters. See also \fB#$size\fR. Does not work
- Xwith device \fB-tplot\fP. \fBNote:\fP Relative plotting area's ratio in
- X\fIx\fP and \fIy\fP directions also affects the character's shape (see
- X\fB#$size\fP).
- X.RE
- X.PP
- X.B -s
- X.I factor
- X.br
- X.B #$size
- X.I factor
- X.RS
- XChange character's size. Actual character dimensions for HP7475
- Xare:
- X.RS 3
- X\fIheight = size*\fR(1.5/100)\fI*yrelarea\fR
- X.br
- X\fIwidth = size*\fR(0.75/100)\fI*shape_factor*xrelarea,\fR
- X.RE
- Xwhere \fIxrelarea\fR and \fIyrelarea\fR are calculated from
- X\fB-a\fR's or \fB#$area\fR's arguments. Work in a funny way
- Xwith device \fB-tplot\fP: charater size does not change, but there
- Xdistance from each other (in plotted strings) does.
- X.RE
- X.PP
- X.B -t
- X.I device
- X.RS
- XChoose \fIdevice\fP as the target. Possible \fIdevice\fPs are:
- X.BR a4 ", " a3 ", " a " and "
- X.B b
- Xto specify that size paper for HP7475 plotter and \fBega\fP
- Xfor EGA & friends (\fIgl_plot\fR(3) library calls).
- XVersions 2.x and later have standard *NIX \fIplot\fP(3) interface
- Xavailable with \fIdevice\fP \fBplot\fP.
- XIf no device is specified, environment variable \fBDRAWDEV\fP
- Xwill be checked, and that value is used. If no value is found,
- X\fBdraw\fP will use a default value (\fBa4\fR).
- XRefer \fIgl_plot\fR(3) to find its ways to determine its output devices
- X(resolution and such).
- X.RE
- X.PP
- X.B #$text
- X.I x,y,sometext
- X.RS
- XOutput the text \fIsometext\fP into picture so that it starts at
- Xposition \fI(x,y)\fP. The text is made using current settings of
- X.BR #$direction ", " #$size ", "
- X.BR #$shape " and " #$cset ". "
- XThis is the command to put explanatary text into the picture.
- XEach line must be positioned separately. See also
- X.BR #$alabel " and " #$rlabel .
- XThis will force device initialization.
- X.RE
- X.PP
- X.BR #$alabel | #$rlabel
- X.I x,y,sometext
- X.RS
- XOutput the text \fIsometext\fP
- Xinto picture so that it starts at position \fIx,y\fR (with
- X\fB#$alabel\fR), and at offset \fIx,y\fR from current position
- X(with \fB#$rlabel\fR).
- XThe text is made using current settings of
- X.BR #$direction ", " #$size ", "
- X.BR #$shape " and " #$cset ".
- X.PP
- XAfter the text is made, a solid line is drawn below it, and the
- Xline's left end is connected to the point where last data point
- Xwas. There is also made a tiny circle. The purpose of all this
- Xis to provide a way to put labels to individual lines on a picture
- Xwith more than one line.
- XThese will force device initialization.
- X.RE
- X.PP
- X.B -v
- X.RS
- XPrints version number on stderr and exits.
- X.RE
- X.PP
- X.BR -x | -y
- X.I low,incr,high
- X.br
- X.BR #$xrange | #$yrange
- X.I low,incr,high
- X.RS
- XDefines user coordinate system to be used.
- XAll data points to be
- Xdrawn are given using these user coordinates.
- X.I low
- Xand
- X.I high
- Xvalues define the range of observations that will fall in the
- Xpicture area.
- XThese values are also output below the axis's heads.
- X.I incr
- Xdefines, how often to output additional numbers below axes.
- XIf no
- Xuser coordinates are specified,
- X.B draw
- Xwill use default ranges
- X.I -1,1,1
- Xfor both directions.
- XSee also option \fB-g\fP for grid lines.
- X.RE
- X.PP
- X.BR -X | -Y
- X.I axistext
- X.br
- X.BR #$xlabel | #$ylabel
- X.I axistext
- X.RS
- XSpecify
- X.I axistext
- Xto be output at the high end of the axis.
- XThe text is output in
- Xsize of 1.4 times the default size.
- XNo axis texts are made by
- Xdefault.
- X.RE
- X.PP
- X.SH BUGS
- XCertaily.
- XTell me when you find.
- X.PP
- X.SH SEE ALSO
- Xplot(3), gl_plot(3), HP7475 Programmers manual.
- X.PP
- X.SH AUTHOR
- XJuha Takala
- X.br
- Xjta@sah.vtt.fi
- END_OF_FILE
- if test 14856 -ne `wc -c <'draw.1'`; then
- echo shar: \"'draw.1'\" unpacked with wrong size!
- fi
- # end of 'draw.1'
- fi
- if test -f 'getopt.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'getopt.c'\"
- else
- echo shar: Extracting \"'getopt.c'\" \(2467 characters\)
- sed "s/^X//" >'getopt.c' <<'END_OF_FILE'
- X/*
- X** @(#)getopt.c 2.2 (smail) 1/26/87
- X*/
- X
- X/*
- X * Here's something you've all been waiting for: the AT&T public domain
- X * source for getopt(3). It is the code which was given out at the 1985
- X * UNIFORUM conference in Dallas. I obtained it by electronic mail
- X * directly from AT&T. The people there assure me that it is indeed
- X * in the public domain.
- X *
- X * There is no manual page. That is because the one they gave out at
- X * UNIFORUM was slightly different from the current System V Release 2
- X * manual page. The difference apparently involved a note about the
- X * famous rules 5 and 6, recommending using white space between an option
- X * and its first argument, and not grouping options that have arguments.
- X * Getopt itself is currently lenient about both of these things White
- X * space is allowed, but not mandatory, and the last option in a group can
- X * have an argument. That particular version of the man page evidently
- X * has no official existence, and my source at AT&T did not send a copy.
- X * The current SVR2 man page reflects the actual behavor of this getopt.
- X * However, I am not about to post a copy of anything licensed by AT&T.
- X */
- X
- X/* #define BSD */
- X#ifdef BSD
- X#include <strings.h>
- X#else
- X#define index(x,y) strchr((x),(y))
- X#include <string.h>
- X#endif
- X
- X/*LINTLIBRARY*/
- X#define NULL 0
- X#define EOF (-1)
- X#define ERR(s, c) if(opterr){\
- X extern int write();\
- X char errbuf[2];\
- X errbuf[0] = c; errbuf[1] = '\n';\
- X (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
- X (void) write(2, s, (unsigned)strlen(s));\
- X (void) write(2, errbuf, 2);}
- X
- X
- Xint opterr = 1;
- Xint optind = 1;
- Xint optopt;
- Xchar *optarg;
- X
- Xint
- Xgetopt(argc, argv, opts)
- Xint argc;
- Xchar **argv, *opts;
- X{
- X static int sp = 1;
- X register int c;
- X register char *cp;
- X
- X if(sp == 1)
- X if(optind >= argc ||
- X argv[optind][0] != '-' || argv[optind][1] == '\0')
- X return(EOF);
- X else if(strcmp(argv[optind], "--") == NULL) {
- X optind++;
- X return(EOF);
- X }
- X optopt = c = argv[optind][sp];
- X if(c == ':' || (cp=index(opts, c)) == NULL) {
- X ERR(": illegal option -- ", c);
- X if(argv[optind][++sp] == '\0') {
- X optind++;
- X sp = 1;
- X }
- X return('?');
- X }
- X if(*++cp == ':') {
- X if(argv[optind][sp+1] != '\0')
- X optarg = &argv[optind++][sp+1];
- X else if(++optind >= argc) {
- X ERR(": option requires an argument -- ", c);
- X sp = 1;
- X return('?');
- X } else
- X optarg = argv[optind++];
- X sp = 1;
- X } else {
- X if(argv[optind][++sp] == '\0') {
- X sp = 1;
- X optind++;
- X }
- X optarg = NULL;
- X }
- X return(c);
- X}
- END_OF_FILE
- if test 2467 -ne `wc -c <'getopt.c'`; then
- echo shar: \"'getopt.c'\" unpacked with wrong size!
- fi
- # end of 'getopt.c'
- fi
- if test -f 'getopt.l3' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'getopt.l3'\"
- else
- echo shar: Extracting \"'getopt.l3'\" \(2755 characters\)
- sed "s/^X//" >'getopt.l3' <<'END_OF_FILE'
- X.TH GETOPT 3 local
- X.DA 25 March 1982
- X.SH NAME
- Xgetopt \- get option letter from argv
- X.SH SYNOPSIS
- X.ft B
- Xint getopt(argc, argv, optstring)
- X.br
- Xint argc;
- X.br
- Xchar **argv;
- X.br
- Xchar *optstring;
- X.sp
- Xextern char *optarg;
- X.br
- Xextern int optind;
- X.ft
- X.SH DESCRIPTION
- X.I Getopt
- Xreturns the next option letter in
- X.I argv
- Xthat matches a letter in
- X.IR optstring .
- X.I Optstring
- Xis a string of recognized option letters;
- Xif a letter is followed by a colon, the option is expected to have
- Xan argument that may or may not be separated from it by white space.
- X.I Optarg
- Xis set to point to the start of the option argument on return from
- X.IR getopt .
- X.PP
- X.I Getopt
- Xplaces in
- X.I optind
- Xthe
- X.I argv
- Xindex of the next argument to be processed.
- XBecause
- X.I optind
- Xis external, it is normally initialized to zero automatically
- Xbefore the first call to
- X.IR getopt .
- X.PP
- XWhen all options have been processed (i.e., up to the first
- Xnon-option argument),
- X.I getopt
- Xreturns
- X.BR EOF .
- XThe special option
- X.B \-\-
- Xmay be used to delimit the end of the options;
- X.B EOF
- Xwill be returned, and
- X.B \-\-
- Xwill be skipped.
- X.SH SEE ALSO
- Xgetopt(1)
- X.SH DIAGNOSTICS
- X.I Getopt
- Xprints an error message on
- X.I stderr
- Xand returns a question mark
- X.RB ( ? )
- Xwhen it encounters an option letter not included in
- X.IR optstring .
- X.SH EXAMPLE
- XThe following code fragment shows how one might process the arguments
- Xfor a command that can take the mutually exclusive options
- X.B a
- Xand
- X.BR b ,
- Xand the options
- X.B f
- Xand
- X.BR o ,
- Xboth of which require arguments:
- X.PP
- X.RS
- X.nf
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X int c;
- X extern int optind;
- X extern char *optarg;
- X \&.
- X \&.
- X \&.
- X while ((c = getopt(argc, argv, "abf:o:")) != EOF)
- X switch (c) {
- X case 'a':
- X if (bflg)
- X errflg++;
- X else
- X aflg++;
- X break;
- X case 'b':
- X if (aflg)
- X errflg++;
- X else
- X bproc();
- X break;
- X case 'f':
- X ifile = optarg;
- X break;
- X case 'o':
- X ofile = optarg;
- X break;
- X case '?':
- X default:
- X errflg++;
- X break;
- X }
- X if (errflg) {
- X fprintf(stderr, "Usage: ...");
- X exit(2);
- X }
- X for (; optind < argc; optind++) {
- X \&.
- X \&.
- X \&.
- X }
- X \&.
- X \&.
- X \&.
- X}
- X.RE
- X.PP
- XA template similar to this can be found in
- X.IR /usr/pub/template.c .
- X.SH HISTORY
- XWritten by Henry Spencer, working from a Bell Labs manual page.
- XBehavior believed identical to the Bell version.
- X.SH BUGS
- XIt is not obvious how
- X`\-'
- Xstanding alone should be treated; this version treats it as
- Xa non-option argument, which is not always right.
- X.PP
- XOption arguments are allowed to begin with `\-';
- Xthis is reasonable but reduces the amount of error checking possible.
- X.PP
- X.I Getopt
- Xis quite flexible but the obvious price must be paid: there is much
- Xit could do that it doesn't, like
- Xchecking mutually exclusive options, checking type of
- Xoption arguments, etc.
- END_OF_FILE
- if test 2755 -ne `wc -c <'getopt.l3'`; then
- echo shar: \"'getopt.l3'\" unpacked with wrong size!
- fi
- # end of 'getopt.l3'
- fi
- if test -f 'kiero.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'kiero.c'\"
- else
- echo shar: Extracting \"'kiero.c'\" \(1898 characters\)
- sed "s/^X//" >'kiero.c' <<'END_OF_FILE'
- X/*
- X
- XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; version 1.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X the file "License for more details
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X
- X */
- X
- X/* Description:
- X * Screwed demo to tie your cpu for a while. Pipe the output of this
- X * program to the "draw" that you just made, and "draw"'s output to the
- X * device you like.
- X */
- X
- X#include <math.h>
- X#include <stdio.h>
- X
- Xstatic char *rcsid =
- X "$Id: kiero.c,v 1.3 89/12/08 14:00:54 jta Exp Locker: jta $";
- X
- Xdouble param[8] = {0.99, -0.7, 3.01, 1.01, 0.1, 15.03, 0.01};
- Xstatic char *ttbl[] = {
- X "#$xrange -2,1,2",
- X "#$yrange -2,1,2",
- X "#$noaxes",
- X "#$init",
- X "#$size 2",
- X "#$text -2,1.9,See: Computer Recreations",
- X "#$text -2,1.7,Scientific American, May -88, p.95",
- X "#$size 1.4",
- X "#$text -2,-1.75,Hit your interrupt character to stop.",
- X NULL
- X};
- X
- Xint maxn = 100000;
- X
- Xmain (argc, argv, envp)
- Xint argc;
- Xchar *argv[], *envp[];
- X{
- X double t, *p;
- X char **cp;
- X int i;
- X
- X if (argc > 1) {
- X maxn = atoi(*(++argv));
- X argc--;
- X }
- X
- X p = param;
- X while (--argc > 0)
- X *(p++) = atof(*(++argv));
- X
- X for (cp=ttbl; *cp; cp++)
- X printf ("%s\n", *cp);
- X
- X t = 0.0;
- X for (i=0; i<maxn; i++) {
- X printf ("%8.4f %8.4f\n",
- X sin(param[0]*t) + param[1] * cos(param[2]*t),
- X cos(param[3]*t) + param[4] * sin(param[5]*t));
- X t += param[6];
- X }
- X}
- END_OF_FILE
- if test 1898 -ne `wc -c <'kiero.c'`; then
- echo shar: \"'kiero.c'\" unpacked with wrong size!
- fi
- # end of 'kiero.c'
- fi
- if test -f 'koe' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'koe'\"
- else
- echo shar: Extracting \"'koe'\" \(35 characters\)
- sed "s/^X//" >'koe' <<'END_OF_FILE'
- Xdraw -tplot koe.dat | tplot -T4014
- END_OF_FILE
- if test 35 -ne `wc -c <'koe'`; then
- echo shar: \"'koe'\" unpacked with wrong size!
- fi
- chmod +x 'koe'
- # end of 'koe'
- fi
- if test -f 'koe.dat' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'koe.dat'\"
- else
- echo shar: Extracting \"'koe.dat'\" \(360 characters\)
- sed "s/^X//" >'koe.dat' <<'END_OF_FILE'
- X# koe.dat -- test data for draw.c
- X# #$area 0,0,0.5,0.5
- X#$xrange 0,0.1,1
- X#$yrange 0,0.2,1
- X# #$grid 2,1
- X#$name Name: jyklTqg
- X#$xlabel X: jyklTqg
- X#$ylabel Y: jyklTqg
- X#$date
- X0.01 0.52
- X0.21 0.63
- X0.41 0.41
- X#$alabel 0.53,0.77 label for data
- X0.61 0.55
- X0.81 0.45
- X0.99 0.51
- X#$include vttlogo
- X#$mark X
- X0.1 0.24
- X0.3 0.37
- X0.5 0.22
- X0.61 0.55
- X0.81 0.45
- X0.99 0.51
- X#
- X# -eof-
- END_OF_FILE
- if test 360 -ne `wc -c <'koe.dat'`; then
- echo shar: \"'koe.dat'\" unpacked with wrong size!
- fi
- # end of 'koe.dat'
- fi
- if test -f 'makefile.dos' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'makefile.dos'\"
- else
- echo shar: Extracting \"'makefile.dos'\" \(515 characters\)
- sed "s/^X//" >'makefile.dos' <<'END_OF_FILE'
- X#
- X#
- X# I don't know about Mosse-dos makes. This makefile does not work with
- X# Microsoft make (?). Here is a bat file you can use to compile each .c
- X# file into .obj, how about link ?
- X# cl -AL -FPa -Zi -c %1.c
- X
- XSRC = draw.c hpp.c getopt.c
- XOBJS = draw.obj hpp.obj getopt.obj
- X
- Xdraw.exe: $(OBJS)
- X link $(OBJS),,,;
- X
- Xall: draw.exe
- X
- Xkoe: draw.exe koe.dat
- X draw -dd -x 5,5,15 -y 0,10,30 -g 1,2 koe.dat >koe.pic
- X
- Xgetopt.obj: getopt.c
- X cl -c $*.c
- X
- Xhpp.obj: hpp.c hpp.h
- X cl -c $*.c
- X
- Xdraw.obj: draw.c hpp.h
- X cl -c $*.c
- END_OF_FILE
- if test 515 -ne `wc -c <'makefile.dos'`; then
- echo shar: \"'makefile.dos'\" unpacked with wrong size!
- fi
- # end of 'makefile.dos'
- fi
- if test -f 'vttlogo' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'vttlogo'\"
- else
- echo shar: Extracting \"'vttlogo'\" \(361 characters\)
- sed "s/^X//" >'vttlogo' <<'END_OF_FILE'
- X#$penup
- X#$absolute 0.2,0.1
- X# mutterin kuori
- X0.012 0.05
- X0.03 0.005
- X0.07 0.005
- X0.088 0.05
- X0.07 0.095
- X0.03 0.095
- X0.012 0.05
- X#$penup
- X# V
- X0.041 0.090
- X0.050 0.055
- X0.059 0.090
- X#$penup
- X# vasemmanpuoleinen T
- X0.027 0.045
- X0.045 0.045
- X#$penup
- X0.036 0.045
- X0.036 0.010
- X#$penup
- X# oikeanpuoleinen T
- X0.055 0.045
- X0.073 0.045
- X#$penup
- X0.064 0.045
- X0.064 0.010
- X#$endabsolute
- X#$penup
- END_OF_FILE
- if test 361 -ne `wc -c <'vttlogo'`; then
- echo shar: \"'vttlogo'\" unpacked with wrong size!
- fi
- # end of 'vttlogo'
- fi
- echo shar: End of archive 1 \(of 2\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-